#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N = 2e5 + 10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
ll n, k, a[N], pre[N];
void solve()
{
    cin >> n >> k;
    for(int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + 1 + n);
    for(int i = 1; i <= n; i++) pre[i] = pre[i - 1] + a[i];

    ll ans = INF;
    for(ll i = 0; i <= n - 1; i++) //有多少个数字变成了最小值 nlogn
    {
        ll l = -INF;
        ll r = INF;
        while(l < r) //二分的是使a[1]减去一个数==mid,使得满足条件的最小步骤
        {
            int mid = l + r + 1 >> 1; //对a[1]减去多少1后为mid

            if(pre[n - i] - a[1] + mid * (i + 1) <= k) l = mid;
            else r = mid - 1;
        }

        ans = min(ans, max(0ll, a[1] - l) + i);//找到最大mid可能是是大于a[1]的,那么这样就不需要更改
    }

    cout << ans << '\n';



}

int main()
{
    close();
    int T;
    cin >> T;
    while (T--) solve();
    return 0;
}
//需要一个前缀数组维护前缀和大小
//问最小操作数
//二分性,右半边改为最小值,左半边不变成立后,mid往左走一定满足情况,现在找mid的最大值